package com.cx.mall.common.entity.user.entity;

import com.baomidou.mybatisplus.annotation.*;
import jakarta.validation.constraints.*;
import lombok.Getter;
import lombok.Setter;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 后台用户表
 * </p>
 *
 * @author zs
 * @since 2025-08-07
 */
@Getter
@Setter
@TableName("user_info")
public class UserInfo implements Serializable {

    @Serial  // 序列化ID，用于Java序列化机制，表示类的唯一标识符
    private static final long serialVersionUID = 1L;

    /**
     * 编号
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户名
     * @NotBLank 注解：表示该字段不能为空  不能为空字符串 null 不能只包含空格
     * @NotNull 注解：表示该字段不能为null
     *
     */
    @NotBlank(message = "用户名不能为空")   //
    @Size(min = 6, max = 20, message = "用户名长度在6-20个字符之间")
    @Pattern(regexp = "^[a-zA-Z0-9_*.@~`]{6,20}$", message = "用户名只能包含字母、数字和下划线")
    @TableField("username")
    private String username;

    /**
     * 密码
     */
    @NotBlank(message = "密码不能为空")
    @Size(min = 6, max = 20, message = "密码长度在6-20个字符之间")
    @Pattern(regexp = "^[a-zA-Z0-9_*.@~`]{6,20}$", message = "密码只能包含字母、数字和下划线")
    @TableField("password")
    private String password;

    /**
     * 邮箱
     */
    @Email(message = "邮箱格式错误")
    @NotBlank(message = "邮箱不能为空")
    @Size(max = 50, message = "邮箱长度不能超过50个字符")
    @TableField("email")
    private String email;

    /**
     * 昵称
     */
    @NotBlank(message = "昵称不能为空")
    @Size(max = 20, message = "昵称长度不能超过20个字符")
    @TableField("nick_name")
    private String nickName;

    /**
     * 备注信息
     */
    @Size(max = 200, message = "备注信息长度不能超过200个字符")
    @TableField("note")
    private String note;

    /**
     * 创建时间
     */
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 帐号启用状态：1->禁用；0->启用
     */
    @TableField(value = "status",fill = FieldFill.INSERT)
    private Integer status;
}
